/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import DAO.util.ConectaBanco;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import model.Fornecedor;

import model.Pedido;

/**
 *
 * @author Alex
 */
public class PedidoDAO {

    public void criar(Pedido pedido) throws SQLException {

        Connection conexao = ConectaBanco.getConexao();

        String sql = "insert into pedido(identificacao,data_pedido, status) values (?,current_timestamp,0)";
        // seta os parametros no sql

        PreparedStatement pstmt = conexao.prepareCall(sql);

        pstmt.setString(1, pedido.getIdentificacao());

        System.out.println(sql);
        pstmt.execute();
        conexao.close();

    }

    public ArrayList<Pedido> buscarPorData(String fornecedor) throws ClassNotFoundException, SQLException {
        ArrayList<Pedido> pedidos = new ArrayList<Pedido>();
        Connection conexao = null;

        conexao = ConectaBanco.getConexao();

        String sql = "SELECT * FROM pedido p INNER JOIN fornecedor f ON p.id_fornecedor=f.id WHERE f.nome like ?";

        PreparedStatement pst = conexao.prepareStatement(sql);

        pst.setString(1, fornecedor + "%");

        ResultSet rs = pst.executeQuery();

        FornecedorDAO fornecedorDAO = new FornecedorDAO();

        while (rs.next()) {
            Pedido pedido = new Pedido();

            pedido.setId(rs.getInt("id"));
            pedido.setFornecedor(fornecedorDAO.buscarLoginByCodigo(rs.getInt("id_fornecedor")));
            pedido.setData(rs.getDate("data_pedido"));
            pedido.setValorTotal(rs.getDouble("valor_total"));
            pedido.setStatus(rs.getInt("status"));

            pedidos.add(pedido);
        }
        conexao.close();
        return pedidos;

    }

    public ArrayList<Pedido> buscarPorPendentes(String fornecedor) throws ClassNotFoundException, SQLException {
        ArrayList<Pedido> pedidos = new ArrayList<Pedido>();
        Connection conexao = null;

        conexao = ConectaBanco.getConexao();

        String sql = "SELECT * FROM pedido p INNER JOIN fornecedor f ON p.id_fornecedor=f.id WHERE f.nome like ? AND p.status=0";

        PreparedStatement pst = conexao.prepareStatement(sql);

        pst.setString(1, fornecedor + "%");

        ResultSet rs = pst.executeQuery();

        FornecedorDAO fornecedorDAO = new FornecedorDAO();

        while (rs.next()) {
            Pedido pedido = new Pedido();

            pedido.setId(rs.getInt("id"));
            pedido.setFornecedor(fornecedorDAO.buscarLoginByCodigo(rs.getInt("id_fornecedor")));
            pedido.setData(rs.getDate("data_pedido"));
            pedido.setValorTotal(rs.getDouble("valor_total"));
            pedido.setStatus(rs.getInt("status"));

            pedidos.add(pedido);
        }
        conexao.close();
        return pedidos;

    }

    public boolean atualizar(Pedido pedido) {
        try {
            Connection conexao = ConectaBanco.getConexao();

            String sql = "update pedido set status=? where id= ?";

            PreparedStatement pstmt = conexao.prepareCall(sql);
            pstmt.setInt(1, pedido.getStatus());
            pstmt.setInt(2, pedido.getId());

            pstmt.execute();
            System.out.println("Cadastro realizado com sucesso");
            conexao.close();
            return true;
        } catch (SQLException sql) {
            System.out.println("Erro ao atualizar registro");

            return false;

        }
    }

    public boolean atualizarPedido(Pedido pedido) throws SQLException {

        Connection conexao = ConectaBanco.getConexao();

        String sql = "update pedido set id_fornecedor=?,valor_total = (select sum(valor) from item_pedido where id_pedido = ?), status=1 where id= ?";

        PreparedStatement pstmt = conexao.prepareCall(sql);
        pstmt.setInt(1, pedido.getFornecedor().getId());
        pstmt.setInt(2,pedido.getId());
        pstmt.setInt(3, pedido.getId());

        pstmt.execute();
        conexao.close();
        return true;

    }

    public Pedido buscarPorCodigo(int codigo) throws ClassNotFoundException, SQLException {
        Connection conexao = ConectaBanco.getConexao();
        PreparedStatement sql = conexao.prepareStatement("select * from pedido where id=? ");
        sql.setInt(1, codigo);
        ResultSet rs = sql.executeQuery();

        Pedido pedido = new Pedido();
        FornecedorDAO fornecedorDAO = new FornecedorDAO();

        while (rs.next()) {
            pedido.setId(rs.getInt("id"));
            pedido.setData(rs.getDate("data_pedido"));
            pedido.setFornecedor(fornecedorDAO.buscarLoginByCodigo(rs.getInt("id_fornecedor")));
            pedido.setValorTotal(rs.getDouble("valor_total"));
            pedido.setStatus(rs.getInt("status"));

        }
        return pedido;
    }

    public Pedido buscarIdentificacao(String identificacao) throws ClassNotFoundException, SQLException {
        Connection conexao = ConectaBanco.getConexao();
        PreparedStatement sql = conexao.prepareStatement("select id, identificacao from pedido where identificacao=? ");
        sql.setString(1, identificacao);
        ResultSet rs = sql.executeQuery();

        Pedido pedido = new Pedido();

        while (rs.next()) {
            pedido.setId(rs.getInt("id"));
            pedido.setIdentificacao(rs.getString("identificacao"));
        }
        return pedido;
    }

    public void pagamentoEfetuado(int id) throws SQLException {
        System.out.println("pago dao");
        Connection conexao = ConectaBanco.getConexao();

        String sql = "update pedido set status=1 where id=?";

        PreparedStatement pstmt = conexao.prepareCall(sql);

        pstmt.setInt(1, id);

        pstmt.execute();

        conexao.close();

    }

    public void marcarInativo(int id) throws SQLException {

        Connection conexao = ConectaBanco.getConexao();

        String sql = "update pedido set status=0 where id=?";

        PreparedStatement pstmt = conexao.prepareCall(sql);

        pstmt.setInt(1, id);

        pstmt.execute();

        conexao.close();

    }

    public boolean apagar(int id) throws SQLException {
        System.out.println("dao aopagar");
        Connection conexao = ConectaBanco.getConexao();

        String sql = "delete from pedido where id = ?";
        PreparedStatement pstmt = conexao.prepareCall(sql);

        pstmt.setInt(1, id);

        pstmt.execute();

        conexao.close();
        return true;

    }

}
